Fix GtkApplicationWindow menubar placement
authorMatthias Clasen <mclasen@redhat.com>
Wed, 27 Mar 2013 04:23:19 +0000 (00:23 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 27 Mar 2013 04:23:19 +0000 (00:23 -0400)
Since the menubar is part of the content, we need to give
it the content_window as parent window, to make things
work again.
https://bugzilla.gnome.org/show_bug.cgi?id=696561

gtk/gtkapplicationwindow.c
gtk/gtkwindow.c
gtk/gtkwindowprivate.h

index 541baf6a03145dd1212d74b497692ffb749be6fc..532c1d471758bcf34211e24b48459416336f257b 100644 (file)
@@ -258,6 +258,9 @@ gtk_application_window_update_menubar (GtkApplicationWindow *window)
 
       window->priv->menubar = gtk_menu_bar_new_from_model (G_MENU_MODEL (combined));
       gtk_widget_set_parent (window->priv->menubar, GTK_WIDGET (window));
+      if (_gtk_window_get_content_window (GTK_WINDOW (window)) != NULL)
+        gtk_widget_set_parent_window (window->priv->menubar,
+                                      _gtk_window_get_content_window (GTK_WINDOW (window)));
       gtk_widget_show_all (window->priv->menubar);
       g_object_unref (combined);
 
@@ -760,6 +763,10 @@ gtk_application_window_real_realize (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_application_window_parent_class)
     ->realize (widget);
 
+  if (window->priv->menubar != NULL)
+    gtk_widget_set_parent_window (window->priv->menubar,
+                                  _gtk_window_get_content_window (GTK_WINDOW (window)));
+
 #ifdef GDK_WINDOWING_X11
   {
     GdkWindow *gdkwindow;
index 59d654279df538f8edb6fbaa03482e92c5c49c51..0f5e46bd6a5d18c5dbf59849d075ad1ffd67d7a4 100644 (file)
@@ -11271,3 +11271,9 @@ ensure_state_flag_backdrop (GtkWidget *widget)
 
   gtk_widget_queue_draw (widget);
 }
+
+GdkWindow *
+_gtk_window_get_content_window (GtkWindow *window)
+{
+  return window->priv->content_window;
+}
index 8891ca4c4f0a6bc1c68b0b8cfb4d75034fc4c2e5..1dca8c5dd095b2cb10fdfdc3befc57bef7452899 100644 (file)
@@ -69,6 +69,7 @@ void            _gtk_window_get_wmclass            (GtkWindow  *window,
 void            _gtk_window_set_allocation         (GtkWindow           *window,
                                                     const GtkAllocation *allocation,
                                                     GtkAllocation       *allocation_out);
+GdkWindow *     _gtk_window_get_content_window     (GtkWindow           *window);
 
 typedef void (*GtkWindowKeysForeachFunc) (GtkWindow      *window,
                                           guint           keyval,